home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 109 / EnigmaAmiga109CD.iso / dalla rivista / amiga.free / sorgenti vari / wolf3dmacsource.sit / Wolf3DMacSource / wolfdef.h < prev    next >
Text File  |  2000-01-21  |  29KB  |  881 lines

  1. #ifndef __WOLFDEF__
  2. #define __WOLFDEF__
  3.  
  4. #define DEMO        /* Define if this is the lame demo for dealers */
  5.  
  6. /* japversion has mission pics instead */
  7. /* #define JAPVERSION */
  8.  
  9. /* If code is compiled on a IIgs, pass the compiler presets... */
  10.  
  11. #ifdef __ORCAC__
  12. #pragma optimize 15        /* Normal optimization */
  13. #pragma memorymodel 0    /* Force small memory model */
  14. #pragma noroot            /* No root files */
  15. #pragma lint -1            /* Full error checking */
  16. segment "Wolf3d";        /* Code segment */
  17. #endif
  18.  
  19. /* an angle_t occupies an entire 16 bits so wraparound is automatically handled */
  20.  
  21. #define    SHORTTOANGLESHIFT    7    /* 0x10000 to ANGLES */
  22. #define    SLOPEBITS 9        /* Used in AngleFromSlope2 */
  23.  
  24. typedef unsigned short angle_t;        /* Must be short to allow wraparound */
  25. typedef short fixed_t;                /* 8.8 fixed point number */    
  26. typedef unsigned short ufixed_t;    /* 8.8 unsigned fixed point number */
  27.  
  28. #include <burger.h>        /* My standard system equates */
  29. #include "States.h"        /* Think state equates */
  30. #include "Sounds.h"        /* Sound equates */
  31. #include "Sprites.h"    /* Sprite indexs */
  32. #include "Wolf.h"        /* Resource maps */
  33.  
  34. /**********************************
  35.  
  36.     Game constants and equates
  37.     
  38.     The game uses a tile map of 64X64 tiles and uses a 16 bit fixed
  39.     point number to record the placement of any object in the game. The
  40.     upper 8 bits are the tile with the lower 8 bits being which fraction into the
  41.     tile the player is standing on. 
  42.     
  43.     To adjust the screen size, modify SCREENWIDTH,SCREENHEIGHT,VIEWHEIGHT,ScaleX,ScaleY
  44.     
  45. **********************************/
  46.  
  47. #define    MAXVISSPRITES 64    /* Maximum number of sprites to display (Must be a power of 2!) */
  48. #define MAXACTORS    128        /* max number of nazis, etc / map */
  49. #define MAXSTATICS    200        /* max number of lamps, bonus, etc */
  50. #define MAXMISSILES    32        /* max missiles, flames, smokes, etc */
  51. #define MAXDOORS    64        /* max number of sliding doors (64<=) */
  52. #define MAXAREAS    64        /* max number of bsp areas */
  53. #define    NUMBUTTONS    10        /* Number of control buttons */
  54. #define WALLHEIGHT 128        /* Height,width of walls */
  55. #define SPRITEHEIGHT 64        /* Height,width of a sprite */
  56. #define MAXSCALER 960        /* Number of scalers to create */
  57.  
  58. #define    PLAYERSIZE    88        /* radius of player in 8.8 fixed point */
  59. #define    PROJECTIONSCALE    (SCREENWIDTH/2)*0x90l
  60. #define    FIELDOFVIEW    364*4 /* fineangles in the SCREENWIDTH wide window*/
  61. #define MINZ 62            /* PLAYERSIZE/sqrt(2) rounded down*/
  62. #define    MAXZ (32*FRACUNIT)    /* Farthest thing away */
  63. #define    FINEANGLES    0x2000        /* Power of 2 */
  64. #define    FINEMASK    (FINEANGLES-1)    
  65. #define    ANGLETOFINESHIFT    3    /* 0x10000 >> 0x2000*/
  66. #define GAMEANGLETOFINE        4    /* 512 << 0x2000 */
  67. #define    ANGLE90        0x4000        /* Use a 0x10000 angle range */
  68. #define    ANGLE180    0x8000        /* Use a 0x10000 angle range */
  69.  
  70. #ifdef __MAC__
  71. #define    SCREENWIDTH    MacWidth        /* Size of the offscreen buffer */
  72. #define SCREENHEIGHT MacHeight    /* Height of the offscreen buffer */
  73. #define VIEWHEIGHT MacViewHeight        /* Height of the viewing area */
  74. Word ScaleX(Word x);        /* Scale factor for 320 mode points projected to SCREEN */
  75. Word ScaleY(Word y);
  76. extern Word MacWidth;
  77. extern Word MacHeight;
  78. extern Word MacViewHeight;
  79. #else
  80. #define    SCREENWIDTH    320        /* Size of the offscreen buffer */
  81. #define SCREENHEIGHT 200    /* Height of the offscreen buffer */
  82. #define VIEWHEIGHT 160        /* Height of the viewing area */
  83. #define ScaleX(x) x        /* Scale factor for 320 mode points projected to SCREEN */
  84. #define ScaleY(y) y
  85. #endif
  86. #define    CENTERY    (VIEWHEIGHT/2)    /* Center of the viewing area */
  87. #define    CENTERX    (SCREENWIDTH/2)    /* Center of the viewing area */
  88.  
  89. #define    ANGLES        512        /* Number of angles for camera */
  90. #define    FRACBITS    8        /* Number of bits of fraction */
  91. #define    FRACUNIT    (1<<FRACBITS)    /* Shift count for fraction conversion */
  92. #define    MAXFRAC    0x7fff        /* Largest fraction constant */
  93. #define    MAXUFRAC    0xffff    /* Largest unsigned fraction constant */
  94. #define MAXDAMAGECOLOR 32    /* Number of shades of red to use for damage */
  95. #define MAXBONUSCOLOR 8        /* Number of shades of gold to use for damage */
  96.  
  97. #define EXTRAPOINTS    20000    /* Points for a free man */
  98. #define STARTAMMO    16        /* Ammo to begin the game with */
  99. #define TILEGLOBAL      256    /* Pixels per tile */
  100. #define MINACTORDIST 192    /* minimum dist from player center*/
  101.                             /* to any actor center*/
  102. #define KNIFEDIST    480        /* max dist for a knife hit (fixed_t) */
  103. #define BITERANGE    350        /* max dist for a bite hit (fixed_t) */
  104. #define MISSILEHITDIST 120    /* max dist for a missile impact (fixed_t) */
  105. #define MAPSIZE        64        /* Size of a map in tiles */
  106.  
  107.  
  108. /* joypad masks */
  109.  
  110. #define JOYPAD_B    0x8000
  111. #define JOYPAD_Y    0x4000
  112. #define JOYPAD_SELECT 0x2000
  113. #define JOYPAD_START 0x1000
  114. #define JOYPAD_UP    0x800
  115. #define JOYPAD_DN    0x400
  116. #define JOYPAD_LFT    0x200
  117. #define JOYPAD_RGT    0x100
  118. #define JOYPAD_A    0x80
  119. #define JOYPAD_X    0x40
  120. #define JOYPAD_TL    0x20
  121. #define JOYPAD_TR    0x10
  122.  
  123. /**********************************
  124.  
  125.     Game enums and record lists 
  126.     
  127. **********************************/
  128.  
  129. typedef enum {        /* Think logic states (MUST match thinkcalls in EnThink.c) */
  130.     T_NULL,            /* No action */
  131.     T_STAND,        /* Watch for player */
  132.     T_CHASE            /* Chase player */
  133. } thinklogic_t;
  134.     
  135. typedef enum {        /* Action logic states (MUST match actioncalls in EnThink.c */
  136.     A_NULL,            /* No action */
  137.     A_TARGET,        /* Target the player */
  138.     A_SHOOT,        /* Shoot the player */
  139.     A_BITE,            /* Bite the player */
  140.     A_THROW,        /* Throw a syringe */
  141.     A_LAUNCH,        /* Launch a missile */
  142.     A_HITLERMORPH,    /* Remove the mechhitler's armor */
  143.     A_MECHSTEP,        /* Mechahitler step sound */
  144.     A_VICTORY,        /* You win */
  145.     A_SCREAM,        /* Actor screams */
  146.     A_THUD            /* Hit the ground */
  147. } actionlogic_t;
  148.  
  149. typedef enum {        /* Index to the button array */
  150.     bt_north,        /* North pressed */
  151.     bt_east,        /* Turn East pressed */
  152.     bt_south,        /* South pressed */
  153.     bt_west,        /* Turn West pressed */
  154.     bt_left,        /* Move left */
  155.     bt_right,        /* Move right */
  156.     bt_attack,        /* Fire */
  157.     bt_use,            /* Open door, use switch */
  158.     bt_run,            /* Move faster */
  159.     bt_select        /* Change weapons */
  160. } buttonname_t;
  161.  
  162. typedef enum {        /* Used by spawning and wall pushing */
  163.     CD_NORTH,        /* Face north */
  164.     CD_EAST,        /* Face east */
  165.     CD_SOUTH,
  166.     CD_WEST
  167. } cardinaldir_t;
  168.  
  169. typedef enum {        /* Used by actor's motion */
  170.     east,
  171.     northeast,
  172.     north,
  173.     northwest,
  174.     west,
  175.     southwest,
  176.     south,
  177.     southeast,
  178.     nodir
  179. } dirtype;
  180.  
  181. typedef enum {        /* Weapons used by the player */
  182.     WP_KNIFE,
  183.     WP_PISTOL,
  184.     WP_MACHINEGUN,
  185.     WP_CHAINGUN,
  186.     WP_FLAMETHROWER,
  187.     WP_MISSILE,
  188.     NUMWEAPONS
  189. } weapontype;
  190.  
  191. typedef    enum {        /* State of the game */
  192.     EX_LIMBO,        /* Currently in limbo */
  193.     EX_STILLPLAYING,
  194.     EX_COMPLETED,
  195.     EX_SECRET,
  196.     EX_WARPED,
  197.     EX_DIED,
  198.     EX_NEWGAME,
  199.     EX_LOADGAME,
  200.     EX_AUTOMAP
  201. } exit_t;
  202.  
  203. typedef enum {        /* actor class info*/
  204.     CL_GUARD,
  205.     CL_OFFICER,
  206.     CL_SS,
  207.     CL_DOG,
  208.     CL_MUTANT,
  209.     
  210.     CL_HANS,
  211.     CL_SCHABBS,
  212.     CL_TRANS,
  213.     CL_UBER,
  214.     CL_DKNIGHT,
  215.     CL_MECHAHITLER,
  216.     CL_HITLER,
  217.     
  218.     CL_PLAYER
  219. } class_t;
  220.  
  221. enum {BSPTOP,BSPBOTTOM,BSPLEFT,BSPRIGHT};    /* BSP quadrants */
  222.  
  223. /**********************************
  224.  
  225.     Compiled scaler
  226.     
  227. **********************************/
  228.  
  229. typedef struct {
  230.     unsigned short codeofs[WALLHEIGHT+1];        /* Entry to the code for sprites */
  231. #ifndef __APPLEIIGS__
  232.     Byte FixA1[WALLHEIGHT+1];        /* A1 adjust for the screen */
  233.     Byte Pad[1];            /* Long word align it... */
  234. #endif
  235.     Byte code[1];                    /* Scaler code */
  236. } t_compscale;
  237.  
  238. /**********************************
  239.  
  240.     Status of the game (Save game record)
  241.     
  242. **********************************/
  243.  
  244. typedef    struct {
  245.     LongWord score;    /* Current score */
  246.     LongWord nextextra;    /* Points to next free man */
  247.     LongWord globaltime, globaltimetotal;
  248.     LongWord playtime;                    /* Time for the current game (In ticks) */
  249.     Word mapon;        /* Current map */
  250.     Word treasure;    /* Treasures picked up */
  251.     Word lives;        /* Lives remaining */
  252.     Word health;    /* Hit points */
  253.     Word ammo;        /* Current bullets */
  254.     Word maxammo;    /* Maximum bullets */
  255.     Word gas;        /* Flame thrower ammo */
  256.     Word missiles;    /* Missile launcher ammo */
  257.     Word keys;        /* Keys obtained */
  258.     Boolean    machinegun,chaingun,missile,flamethrower;
  259.     weapontype weapon,pendingweapon;
  260.     Word attackframe,attackcount;
  261.     Word secretcount,treasurecount,killcount;
  262.     Word secrettotal,treasuretotal,killtotal;
  263.     Word globalsecret, globaltreasure, globalkill;
  264.     Word globalsecrettotal, globaltreasuretotal, globalkilltotal;
  265.     Word viewangle;                        /* Angle of camera */
  266.     Boolean godmode;                    /* You are invincible */
  267. } gametype_t;
  268.  
  269. /**********************************
  270.  
  271.     Map data record (Stored maps)
  272.     
  273. **********************************/
  274.  
  275. typedef struct {
  276.     Byte tilemap[64][64];
  277.     Byte areasoundnum[64];
  278.     unsigned short numspawn;        /* Must be short */
  279.     unsigned short spawnlistofs;    /* Must be short */
  280.     unsigned short numnodes;        /* Must be short */
  281.     unsigned short nodelistofs;        /* Must be short */
  282.     Byte data[1];        /* nodes, and spawn list */
  283. } loadmap_t;
  284.  
  285. typedef struct {
  286.     unsigned short NextLevel;        /* Normal warp level */
  287.     unsigned short SecretLevel;        /* Secret level */
  288.     unsigned short ParTime;            /* Time for par */
  289.     unsigned short ScenarioNum;        /* Scenario number */
  290.     unsigned short FloorNum;        /* Floor number */
  291. } MapInfo_t;
  292.  
  293. typedef struct {
  294.     unsigned short MaxMap;            /* Maximum number of maps */
  295.     unsigned short MapRezNum;        /* Basic resource # */
  296.     MapInfo_t InfoArray[1];    /* Next map to jump to */
  297. } maplist_t;
  298.  
  299. /**********************************
  300.  
  301.     Static data for each sprite state
  302.     
  303. **********************************/
  304.  
  305. typedef struct {
  306.     Word sightsound;    /* Sound at the sight of you */
  307.     Word deathsound;    /* Sound at the death of the actor */
  308.     stateindex_t sightstate;    /* State when you are sighted */
  309.     stateindex_t standstate;    /* State when at rest */
  310.     stateindex_t attackstate;    /* State when attacking you */
  311.     stateindex_t painstate;        /* State when hit */
  312.     stateindex_t deathstate;    /* State when dead */
  313.     Word points;        /* Points for death */
  314.     Word speed;            /* Speed of actor */
  315.     Word reactionmask;    /* reaction time = 1 + w_rnd()&reactionmask*/
  316.     Word hitpoints;        /* Hit points */
  317. } classinfo_t;
  318.  
  319. enum {di_north, di_east, di_south, di_west};        /* BSP base directions */
  320.  
  321. /**********************************
  322.  
  323.     The saved data structures are held in a single list, with segs being differentiated from 
  324.     nodes by the presence of DIR_SEGFLAG in the dir field
  325.     Note... saveseg_t and savenode_t share the same memory
  326.     
  327. **********************************/
  328.  
  329. #define    DIR_SEGFLAG        0x80    /* Use segment value */
  330. #define    DIR_LASTSEGFLAG    0x40    /* Last segment in list */
  331. #define    DIR_DISABLEDFLAG 0x20    /* Shut down (Pushwall) */
  332. #define    DIR_SEENFLAG    0x10    /* For automapping*/
  333.  
  334. typedef struct {
  335.     Byte plane;
  336.     Byte dir;
  337.     unsigned short children[2];
  338. } savenode_t;
  339.  
  340. #ifndef __BIGENDIAN__
  341. typedef struct {
  342.     Byte    plane;        /* in half tiles*/
  343.     Byte    dir;
  344.     Byte    min,max;    /* in half tiles*/
  345.     Byte    texture;
  346.     Byte    area;
  347. } saveseg_t;
  348. #else
  349. typedef struct {
  350.     Byte    plane;            /* in half tiles*/
  351.     Byte    dir;
  352.     Byte    max,min;        /* in half tiles*/
  353.     Byte    area;
  354.     Byte    texture;
  355. } saveseg_t;
  356. #endif
  357.  
  358. /**********************************
  359.  
  360.     Static object struct
  361.     (Bullets,food,gold)
  362.     
  363. **********************************/
  364.  
  365. /* Used by the renderer, must match the header of static_t, actor_t, missile_t */
  366.  
  367. typedef struct {
  368.     int    x,y;        /* Item's x,y */
  369.     Word sprite;    /* Item's shape */
  370.     Word areanumber;    /* Item's visible area */
  371. } thing_t;
  372.  
  373. typedef struct {    /* Must match thing_t */
  374.     Word x,y;    /* Item's x,y */
  375.     Word pic;    /* Picture of item */
  376.     Word areanumber;    /* Which room is it in (Rendering) */
  377. } static_t;
  378.  
  379. /**********************************
  380.  
  381.     Static door struct
  382.     
  383. **********************************/
  384.  
  385. typedef    enum {
  386.     DR_OPEN,        /* Door is fully open */
  387.     DR_CLOSED,        /* Door is fully closed */
  388.     DR_OPENING,        /* Door is opening */
  389.     DR_CLOSING,        /* Door is closing */
  390.     DR_WEDGEDOPEN    /* Door is permenantly open */
  391. } dooraction_t;
  392.  
  393. #define OPENTICS 120            /* Time to wait before closing a door (In Ticks) */
  394. #define DOORSPEED (TILEGLOBAL/64) /* Time to close a door (32 ticks) */
  395.  
  396. typedef struct {
  397.     Word tilex;        /* X coord of door */
  398.     Word tiley;        /* Y coord of door */
  399.     Word action;    /* Action code (See above) for door */
  400.     Word position;    /* Pixel position of door (0=Closed) */
  401.     Word info;        /* Texture of the door (Steel,Elevator) */
  402.     Word ticcount;    /* Time delay before automatic closing */
  403.     Word area1;        /* Area # on one side of the door */
  404.     Word area2;        /* Area # on the other side of the door */
  405. } door_t;
  406.  
  407. typedef struct {
  408.     Boolean Area1;    /* First area */
  409.     Boolean Area2;    /* Second area */
  410. } connect_t;
  411.  
  412. /**********************************
  413.  
  414.     Pushwall state struct
  415.     
  416. **********************************/
  417.  
  418. typedef struct {
  419.     Word pwallcount;                    /* Blocks still to move (Distance) */
  420.     Word pwallpos;                        /* Amount a pushable wall has been moved in it's tile */
  421.     Word pwallx,pwally;                    /* the tile the pushwall edge is in now*/
  422.     Word pwallcheckx,pwallchecky;        /* the tile it will be in next*/
  423.     Word pwalldir;
  424.     int pwallxchange, pwallychange;      /* adjust coordinates this much*/
  425. } pushwall_t;
  426.  
  427. /**********************************
  428.  
  429.     Sprite state struct
  430.     
  431. **********************************/
  432.  
  433. typedef struct {
  434.     Word shapenum;            /* Shape to display */
  435.     Word tictime;            /* Time before next state */
  436.     thinklogic_t think;        /* Think logic index */
  437.     actionlogic_t action;    /* Action code */
  438.     stateindex_t next;        /* Next state */
  439. } state_t;
  440.  
  441. /**********************************
  442.  
  443.     Visible sprite struct (Used to render the sprites)
  444.     
  445. **********************************/
  446.  
  447. typedef struct {
  448.     void *pos;                /* position of sprite info */
  449.     ufixed_t columnstep;    /* Step factor for width scale */
  450.     int x1,x2;                /* Left x, Right x */
  451.     Word actornum;            /* 0 if a static sprite / missile*/
  452.     Word clipscale;            /* Size of sprite (Scale number) */
  453. } vissprite_t;
  454.  
  455. /**********************************
  456.  
  457.     Data struct for thinking actor
  458.     
  459. **********************************/
  460.  
  461. /* Actor flags */
  462.  
  463. #define FL_SHOOTABLE    1
  464. #define FL_ACTIVE        2
  465. #define FL_SEEPLAYER    4        /* if True, dodge instead of moving straight forward*/
  466. #define FL_AMBUSH        16
  467. #define FL_WAITDOOR        32        /* if set, ac_dir points at a door*/
  468. #define FL_NOTMOVING    64        /* still centered in dest tile*/
  469. #define FL_DEAD            128        /* if set, don't shoot this anymore (death explosion)*/
  470.  
  471. typedef struct {    /* Must match thing_t */
  472.     Word x,y;
  473.     Word pic;
  474.     Word areanumber;
  475.  
  476.     Word ticcount;    /* Time before motion */
  477.     class_t class;    /* Actor's class */
  478.     stateindex_t state;    /* State index */
  479.     Word flags;        /* State flags (See above) */
  480.     Word distance;    /* Distance to travel before change */
  481.     Word dir;        /* 9 directions for motion */
  482.     Word hitpoints;    /* Hit points before death */
  483.     Word speed;        /* Speed of motion */
  484.     Word goalx;        /* tile x,y for movement goal */
  485.     Word goaly;
  486.     Word reacttime;    /* Time to react to the player */
  487. } actor_t;
  488.  
  489. /**********************************
  490.  
  491.     Missile struct
  492.     (Rockets, flames)
  493.     
  494. **********************************/
  495.  
  496. typedef enum {        /* Flame type */
  497.     MI_PMISSILE,        /* Player's missile */
  498.     MI_PFLAME,            /* Player's flame */
  499.     MI_EMISSILE,
  500.     MI_NEEDLE
  501. } mtype_t;
  502.  
  503. #define    MF_HITPLAYER    1        /* Can it hit the player? */
  504. #define    MF_HITENEMIES    2        /* Can it hit an enemy? */
  505. #define    MF_HITSTATICS    4        /* Can it hit a static item? */
  506.  
  507. typedef struct {        /* Must match thing_t */
  508.     Word x,y;            /* Position of the missile */
  509.     Word pic;            /* Picture of missile */
  510.     Word areanumber;    /* Area missile is in */
  511.     Word type;            /* Also used as a ticcount for explosions */
  512.     Word flags;            /* Who can I hit? (If zero then explosion) */
  513.     int    xspeed,yspeed;    /* Direction of travel */
  514. } missile_t;
  515.  
  516. /**********************************
  517.  
  518.     Flags used by tilemap, NOTE: this allows only 128 unique tiles
  519.     
  520. **********************************/
  521.  
  522. #define    TI_SECRET        0x8000        /* Secret level switch */
  523. #define    TI_BODY            0x4000        /* Dead body here */
  524. #define    TI_BLOCKSIGHT    0x2000        /* Sight is blocked */
  525. #define    TI_GETABLE        0x1000        /* Getable item here */
  526. #define    TI_ACTOR        0x800        /* Actor here */
  527. #define    TI_DOOR            0x400        /* Door here */
  528. #define    TI_PUSHWALL        0x200        /* Pushwall here */
  529. #define    TI_SWITCH        0x100        /* Exit switch here */
  530. #define    TI_BLOCKMOVE    0x80        /* Block in motion here */
  531. #define    TI_NUMMASK    0x7f            /* Can be an area, door number, or pwall number */
  532.  
  533. extern LongWord    rw_scale;
  534. extern LongWord    rw_scalestep;
  535. extern Word rw_midpoint;
  536. extern Word rw_mintex;
  537. extern Word rw_maxtex;
  538. extern Byte *rw_texture;
  539. extern int    rw_centerangle;
  540. extern Boolean    rw_downside;        /* True for dir_east and dir_south*/
  541. extern Byte *ArtData[64];
  542. extern Byte textures[MAPSIZE*2+5][MAPSIZE]; /* 0-63 is horizontal, 64-127 is vertical*/
  543.                                         /* 128 - 132 are doors*/
  544.  
  545. /* In Mac.c, 3DO.c, AppleIIgs.c */
  546.  
  547. extern void InitTools(void);
  548. extern void BlastScreen(void);
  549. extern void BlastScreen2(Rect *BlastRect);
  550. extern void DoMacEvents(void);
  551. extern void BailOut(void);
  552. extern void GoodBye(void);
  553. extern void ReadSystemJoystick(void);
  554. extern Word NewGameWindow(Word NewVidSize);
  555. extern void ShowGetPsyched(void);
  556. extern void DrawPsyched(Word Index);
  557. extern void EndGetPsyched(void);
  558. extern Word ChooseGameDiff(void);
  559. extern void ShareWareEnd(void);
  560. extern void FinishLoadGame(void);
  561.  
  562. /* In StateDef.c */
  563.  
  564. extern state_t states[NUMSTATES];    /* Actor states */
  565.  
  566. /* In Doors.c */
  567.  
  568. extern void AddConnection(Word Area1,Word Area2);
  569. extern void RemoveConnection(Word Area1,Word Area2);
  570. extern void RecursiveConnect(Word areanumber);
  571. extern void ConnectAreas(void);
  572. extern void OpenDoor(door_t *door);
  573. extern void CloseDoor(door_t *door);
  574. extern void OperateDoor(Word dooron);
  575. extern void DoorOpen(door_t *door);
  576. extern void DoorOpening(door_t *door);
  577. extern void DoorClosing(door_t *door);
  578. extern void MoveDoors(void);
  579.  
  580. /* Missiles.c */
  581.  
  582. extern missile_t *GetNewMissile(void);
  583. extern void ExplodeMissile(missile_t *MissilePtr);
  584. extern void MissileHitPlayer(missile_t *MissilePtr);
  585. extern Boolean MissileHitEnemy(missile_t *MissilePtr,actor_t *ActorPtr);
  586. extern Boolean CheckMissileActorHits(missile_t *MissilePtr);
  587. extern void MoveMissiles(void);
  588.  
  589. /* In Level.c */
  590.  
  591. extern void SpawnStatic(Word x,Word y,Word shape);
  592. extern void SpawnPlayer(Word x,Word y,Word dir);
  593. extern void SpawnStand(Word x,Word y,class_t which);
  594. extern void SpawnAmbush(Word x,Word y,class_t which);
  595. extern void SpawnDoor(Word x,Word y,Word type);
  596. extern void AddPWallTrack(Word x,Word y,Word tile);
  597. extern void SpawnPushwall(Word x,Word y,Word tile);
  598. extern void SpawnElevator(Word x,Word y);
  599. extern void SpawnOut(Word x,Word y);
  600. extern void SpawnSecret(Word x,Word y);
  601. extern void SpawnThings(void);
  602. extern void ReleaseMap(void);
  603. extern Boolean SetupGameLevel(void);
  604. extern Word LoadWallArt(void);
  605. extern Word LoadSpriteArt(void);
  606.  
  607. /* In Sight.c */
  608.  
  609. extern Boolean CheckLine(actor_t *ActorPtr);
  610. extern void FirstSighting(actor_t *ActorPtr);
  611. extern void T_Stand(actor_t *ActorPtr);
  612.  
  613. /* In Enmove.c */
  614.  
  615. extern dirtype opposite[9];
  616. extern dirtype diagonal[9][9];
  617. extern void NewState(actor_t *ActorPtr,stateindex_t state);
  618. extern Boolean CheckDiag(Word x,Word y);
  619. extern Word CheckSide(Word x,Word y,actor_t *ActorPtr);
  620. extern Boolean TryWalk(actor_t *ActorPtr);
  621. extern void SelectDodgeDir(actor_t *ActorPtr);
  622. extern void SelectChaseDir(actor_t *ActorPtr);
  623. extern void MoveActor(actor_t *ActorPtr,Word move);
  624.  
  625. /* In EnThink.c */
  626.  
  627. void PlaceItemType(Word shape,actor_t *ActorPtr);
  628. extern void KillActor(actor_t *ActorPtr);
  629. extern void DamageActor(Word damage,actor_t *ActorPtr);
  630. extern void A_Throw(actor_t *ActorPtr);
  631. extern void A_Launch(actor_t *ActorPtr);
  632. extern void A_Scream(actor_t *ActorPtr);
  633. extern void A_Thud(actor_t *ActorPtr);
  634. extern void A_Victory(actor_t *ActorPtr);
  635. extern void A_HitlerMorph(actor_t *ActorPtr);
  636. extern void A_Shoot(actor_t *ActorPtr);
  637. extern void A_Bite(actor_t *ActorPtr);
  638. extern Word CalcDistance(actor_t *ActorPtr);
  639. extern void A_Target(actor_t *ActorPtr);
  640. extern void A_MechStep(actor_t *ActorPtr);
  641. extern void T_Chase(actor_t *ActorPtr);
  642. extern void MoveActors(void);
  643.  
  644. /* In PlStuff.c */
  645.  
  646. extern void TakeDamage(Word points,Word x,Word y);
  647. extern void HealSelf(Word points);
  648. extern void GiveExtraMan(void);
  649. extern void GivePoints(LongWord points);
  650. extern void GiveTreasure(void);
  651. extern void GiveWeapon(weapontype weapon);
  652. extern void GiveAmmo(Word ammo);
  653. extern void GiveGas(Word ammo);
  654. extern void GiveMissile(Word ammo);
  655. extern void GiveKey(Word key);
  656. extern void BonusSound(void);
  657. extern void WeaponSound(void);
  658. extern void HealthSound(void);
  659. extern void KeySound(void);
  660. extern void GetBonus(Word x,Word y);
  661.  
  662. /* In PlThink.c */
  663.  
  664. extern void ChangeWeapon(void);
  665. extern void Cmd_Fire(void);
  666. extern void Cmd_Use(void);
  667. extern void Cmd_ChangeWeapon(void);
  668. extern actor_t *TargetEnemy(void);
  669. extern void KnifeAttack(void);
  670. extern void GunAttack(void);
  671. extern void FlameAttack(void);
  672. extern void MissileAttack(void);
  673. extern void MovePlayer(void);
  674.  
  675. /* In PlMove.c */
  676.  
  677. extern void ControlMovement(void);
  678.  
  679. /* In PushWall.c */
  680.  
  681. extern pushwall_t PushWallRec;    /* Record for the single pushwall in progress */
  682. extern void SetPWallChange(void);
  683. extern void PushWallOne(void);
  684. extern void PushWall(Word x,Word y,Word dir);
  685. extern void MovePWalls(void);
  686.  
  687. /* In WolfIO.c */
  688.  
  689. extern void SetNumber(LongWord number,Word x,Word y,Word digits);
  690. extern void IO_CheckInput(void);
  691. extern void IO_DrawFloor(Word floor);
  692. extern void IO_DrawScore(LongWord score);
  693. extern void IO_DrawLives(Word lives);
  694. extern void IO_DrawHealth(Word health);
  695. extern void IO_DrawAmmo(Word ammo);
  696. extern void IO_DrawTreasure(Word treasure);
  697. extern void IO_DrawKeys(Word keys);
  698. extern void IO_AttackShape(Word shape);
  699. extern void IO_DrawFace(Word face);
  700. extern void IO_DrawStatusBar(void);
  701. extern void IO_ClearViewBuffer(void);
  702. extern void IO_ScaleWallColumn(Word x,Word scale,Word tile,Word column);
  703. extern void IO_DisplayViewBuffer(void);
  704.  
  705. /* In SetupScalers.c */
  706.  
  707. extern Boolean BuildCompScale (Word height, void **finalspot,Byte *WorkPtr);
  708. extern Boolean SetupScalers(void);
  709. extern void ReleaseScalers(void);
  710. extern void IO_ScaleMaskedColumn(Word x,Word scale,unsigned short *sprite,Word column);
  711. extern void DrawSmall(Word x,Word y,Word tile);
  712. extern void MakeSmallFont(void);
  713. extern void KillSmallFont(void);
  714.  
  715. /* In Intro.c */
  716.  
  717. extern void Intro(void);
  718.  
  719. /* In Music.c */
  720.  
  721. extern void StopSong(void);
  722. extern void StartSong(Word songnum);
  723.  
  724. /* In WolfMain.c */
  725.  
  726. extern Word w_abs(int v);
  727. extern Byte rndtable[256];
  728. extern Word rndindex;
  729. extern Word w_rnd(void);
  730. extern Word AngleFromSlope2(Word y,Word x);
  731. extern angle_t PointToAngle(fixed_t x,fixed_t y);
  732. extern void GameOver(void);
  733. extern void VictoryScale(void);
  734. extern void Died(void);
  735. extern void UpdateFace(void);
  736. extern void PrepPlayLoop(void);
  737. extern void PlayLoop(void);
  738. extern void NewGame(void);
  739. extern void RedrawStatusBar(void);
  740. extern void GameLoop(void);
  741.  
  742. /* In RefSprite.c */
  743.  
  744. extern void Merge(Word Size1,Word Size2);
  745. extern void SortEvents(void);
  746. extern void RenderSprite(Word x1,Word x2,vissprite_t *rs_seg);
  747. extern void AddSprite(thing_t *thing,Word actornum);
  748. extern void DrawTopSprite(void);
  749. extern void DrawSprites(void);
  750.  
  751. /* In Refresh.c */
  752.  
  753. extern savenode_t *nodes;
  754. extern saveseg_t *pwallseg;
  755. extern fixed_t    FixedByFrac(fixed_t a, fixed_t b);
  756. extern fixed_t    SUFixedMul(fixed_t a, ufixed_t b);
  757. extern fixed_t    FixedDiv(fixed_t a, fixed_t b);
  758. extern fixed_t R_TransformX(fixed_t x,fixed_t y);
  759. extern fixed_t R_TransformZ(fixed_t x,fixed_t y);
  760. extern Word ScaleFromGlobalAngle(int visangle,int distance);
  761. extern void DrawAutomap(Word tx,Word ty);
  762. extern Boolean StartupRendering(Word NewSize);
  763. extern void NewMap(void);
  764. extern void StartPushWall(void);
  765. extern void AdvancePushWall(void);
  766. extern void RenderView(void);
  767.  
  768. /* In Refresh2.c */
  769.  
  770. extern Word MathSize;        /* The current size of the math tables */
  771. extern Word *scaleatzptr;    /* Pointer to the scale table for z projection */
  772. extern short *xtoviewangle;    /* Screen x to view angle */
  773. extern short *viewangletox;    /* View angle to screen x */
  774. extern short *finetangent;    /* Fine tangent table */
  775. extern short *finesine;        /* Fine sine table */
  776. extern fixed_t sintable[ANGLES];    /* Course sine table */
  777. extern fixed_t costable[ANGLES];    /* Course cosine table */
  778. extern Word tantoangle[513];        /* Course tangent to angle table */
  779. extern void GetTableMemory(void);
  780.  
  781. /* In RefBsp.c */
  782.  
  783. extern void RenderWallLoop(Word x1,Word x2,Word distance);
  784. extern void RenderWallRange(Word start,Word stop,saveseg_t *seg,Word distance);
  785. extern void ClipWallSegment(Word top,Word bottom,saveseg_t *seg,Word distance);
  786. extern void ClearClipSegs(void);
  787. extern void P_DrawSeg(saveseg_t *seg);
  788. extern Boolean CheckBSPNode(Word boxpos);
  789. extern void TerminalNode(saveseg_t *seg);
  790. extern void RenderBSPNode(Word bspnum);
  791.  
  792. /* In SnesMain.c */
  793.  
  794. extern void SetupPlayScreen(void);
  795. extern void RunAutoMap(void);
  796. extern void StartGame(void);
  797. extern Boolean TitleScreen(void);
  798. extern void WolfMain(void);
  799.  
  800. /* In Intermis.c */
  801.  
  802. extern void LevelCompleted(void);
  803. extern void Intermission(void);
  804. extern void VictoryIntermission(void);
  805. extern void CharacterCast(void);
  806.  
  807. /* In Data.c */
  808.  
  809. extern void *SpriteArray[S_LASTONE];            /* Pointers to all the sprites */
  810. extern Word tilemap[MAPSIZE][MAPSIZE];    /* Main tile map */
  811. extern Word ConnectCount;                /* Number of valid interconnects */
  812. extern connect_t areaconnect[MAXDOORS];    /* Is this area mated with another? */
  813. extern Boolean areabyplayer[MAXAREAS];    /* Which areas can I see into? */
  814. extern Word numstatics;                    /* Number of active static objects */
  815. extern static_t    statics[MAXSTATICS];    /* Data for the static items */
  816. extern Word numdoors;                        /* Number of active door objects */
  817. extern door_t doors[MAXDOORS];                /* Data for the door items */
  818. extern Word nummissiles;                    /* Number of active missiles */
  819. extern missile_t missiles[MAXMISSILES];        /* Data for the missile items */
  820. extern Word numactors;                        /* Number of active actors */
  821. extern actor_t actors[MAXACTORS];            /* Data for the actors */
  822. extern t_compscale *AllScalers[MAXSCALER];    /* Pointers to all the compiled scalers */    
  823. extern Byte **GameShapes;        /* Pointer to the game shape array */
  824. extern Word difficulty;                    /* 0 = easy, 1= normal, 2=hard*/
  825. extern gametype_t gamestate;            /* Status of the game (Save game) */
  826. extern exit_t playstate;                /* Current status of the game */
  827. extern Word killx,killy;                /* X,Y of the thing that killed you! */
  828. extern Boolean madenoise;                /* True when shooting or screaming*/
  829. extern Boolean playermoving;            /* Is the player in motion? */
  830. extern Boolean useheld;                    /* Holding down the use key? */
  831. extern Boolean selectheld;                /* Weapon select held down */
  832. extern Boolean attackheld;                /* Attack button held down? */
  833. extern Boolean buttonstate[NUMBUTTONS];    /* Current input */
  834. extern Word joystick1;                    /* Joystick value */
  835. extern int mousex;                        /* Mouse x movement */
  836. extern int mousey;                        /* Mouse y movement */
  837. extern int mouseturn;                    /* Mouse turn factor */
  838. extern Word nextmap;                    /* Next map to warp to */
  839. extern Word facecount;                    /* Time to show a specific head */
  840. extern Word faceframe;                    /* Head pic to show */
  841. extern Word elevatorx,elevatory;        /* x,y of the elevator */
  842. extern Word firstframe;                    /* if non 0, the screen is still faded out */
  843. extern Word OldMapNum;                    /* Currently loaded map # */
  844. extern loadmap_t *MapPtr;                /* Pointer to current loaded map */
  845. extern int clipshortangle;                /* Angle for the left edge of the screen */
  846. extern int clipshortangle2;                /* clipshortangle * 2 */
  847. extern classinfo_t classinfo[];            /* Class information for all bad guys */
  848. extern Word viewx;                        /* X coord of camera */
  849. extern Word viewy;                        /* Y coord of camera */
  850. extern fixed_t viewsin;                    /* Base sine for viewing angle */
  851. extern fixed_t viewcos;                    /* Base cosine for viewing angle */
  852. extern Word normalangle;                /* Normalized angle for view (NSEW) */
  853. extern Word centerangle;                /* viewangle in fineangles*/
  854. extern Word centershort;                /* viewangle in 64k angles*/
  855. extern Word topspritescale;                /* Scale of topmost sprite */
  856. extern Word topspritenum;                /* Shape of topmost sprite */
  857. extern Word xscale[1024];        /* Scale factor for width of the screen */
  858. extern Word numvisspr;                /* Number of valid visible sprites */
  859. extern vissprite_t    vissprites[MAXVISSPRITES];    /* Buffer for sprite records */
  860. extern Word xevents[MAXVISSPRITES]; /* Scale events for sprite sort */
  861. extern Word sortbuffer[MAXVISSPRITES]; /* mergesort requires an extra buffer*/
  862. extern Word *firstevent;            /* First event in sorted list */
  863. extern Boolean areavis[MAXAREAS];    /* Area visible */
  864. extern Word bspcoord[4];            /* Rect for the BSP search */
  865. extern Word TicCount;                /* Ticks since last screen draw */
  866. extern Word LastTicCount;            /* Tick value at start of render */
  867. extern Word MacVidSize;        /* Current 0 = 320, 1 = 512, 2 = 640 */
  868. extern Word SlowDown;        /* If true, then limit game to 30hz */
  869. extern Word MouseEnabled;    /* Allow mouse control */
  870. extern Word GameViewSize;    /* Size of the game screen */
  871. extern Boolean IntermissionHack;    /* Hack for preventing double score drawing during intermission */
  872. extern Word NoWeaponDraw;        /* Flag to not draw the weapon on the screen */
  873. extern maplist_t *MapListPtr;        /* Pointer to map info record */
  874. extern unsigned short *SongListPtr;    /* Pointer to song list record */
  875. extern unsigned short *WallListPtr;    /* Pointer to wall list record */
  876. extern Word MaxScaler;            /* Maximum number of VALID scalers */
  877. extern Word NaziSound[];        /* Sounds for nazis starting */
  878. extern Boolean ShowPush;        /* Cheat for showing pushwalls on automap */
  879.  
  880. #endif /* __WOLFDEF__ */
  881.